详谈redis之有序集合(ZSET)

您所在的位置:网站首页 redis zset score 最大值 详谈redis之有序集合(ZSET)

详谈redis之有序集合(ZSET)

2023-12-29 22:29| 来源: 网络整理| 查看: 265

一、前言

有序集合存储着成员(member)和分值(score)的键值对,按照分值从小到大自动排序,具体细节在第一篇blog《详谈redis数据结构》中,不太熟悉的同学可以回去查看。对Java不太熟悉的同学可关注文章末尾的公众号,里面满满干货。

二、命令 2.1 ZADD

ZADD全称zset add 将给定分值的成员添加到有序集合里面

System.out.println(conn.zadd("high",180,"Kelvin"));

查看redis中,已存储该条数据 在这里插入图片描述

2.2 ZREM

ZREM全称zset remove 从有序集合里面移除给定的成员,并返回被移除成员的数量

System.out.println(conn.zrem("high","Kelvin"));

在这里插入图片描述

2.3 ZCARD

ZCARD全称zset card 返回有序集合包含的成员数量

System.out.println(conn.zadd("high",180,"Kelvin")); System.out.println(conn.zadd("high",160,"Lina")); System.out.println(conn.zadd("high",177,"Mike")); System.out.println(conn.zcard("high"));

在这里插入图片描述 在这里插入图片描述 zcard命令返回3.

2.4 ZINCRBY

ZINCRBY全称zset increase by 将成员的分值加上一个给定数。

System.out.println(conn.zincrby("high",2,"Kelvin"));

在这里插入图片描述

2.5 ZCOUNT

ZCOUNT全称zset count 返回分值在[min,max]之间的成员数量

System.out.println(conn.zcount("high",165,190));

在这里插入图片描述

2.6 ZRANK

ZRANK全称zset rank 返回成员在有序集合中的排名

System.out.println(conn.zrank("high","Kelvin"));

在这里插入图片描述

2.7 ZSCORE

ZSCORE全称zset score 返回成员的分值

System.out.println(conn.zscore("high","Kelvin"));

在这里插入图片描述

2.8 ZRANGE

ZRANGE全称zset range 返回有序集合中排名介于[start,stop]之间的成员,如果给定了可选的WITHSCORES选项,那么命令会将成员的分值也一并返回。

为了使我们的有序集合更具有可操作性,先添加一些成员。

//先将high有序集合扩充一下 System.out.println(conn.zadd("high",155,"Jin")); System.out.println(conn.zadd("high",161,"Yellow")); System.out.println(conn.zadd("high",172,"Lucy"));

查看redis里面high有序集合存储的信息 在这里插入图片描述 OK,我们现在选择选出身高排名第3到第6之间的同学,(3,6]

System.out.println(conn.zrange("high",3,6));

在这里插入图片描述 由结果得知,zrange的范围是左开右闭。

那么如果我们想拿到(3,6]并且拿到这些同学的分值

System.out.println(conn.zrangeWithScores("high",3,6));

在这里插入图片描述

2.9 ZREVRANK

ZREVRANK全称zset reversal rank 返回成员在有序集合里的排名,按照分值从大到小排列,默认的是从小到大,这里翻转了一下。 在这里插入图片描述 我们可以看到,“Kelvin”排第6,“Yellow”排第3,但是从逆向来看,“Kelvin”为0,“Yellow”为3,那么我们写行代码查看一下。

System.out.println(conn.zrevrank("high","Yellow")); System.out.println(conn.zrevrank("high","Kelvin"));

在这里插入图片描述

2.10 ZREVRANGE

ZREVRANGE全称zset reverse range 返回有序集合给定排名范围内的成员,成员按照分值从大到小排列

System.out.println(conn.zrevrange("high",1,5));

在这里插入图片描述 ZREVRANGEWITHSCORES 返回有序集合给定排名范围内的成员,并显示分值,成员按照分值从大到小排列

System.out.println(conn.zrevrangeWithScores("high",1,5));

在这里插入图片描述

2.11 ZRANGEBYSCORE

ZRANGEBYSCORE全称zset range by score 返回有序集合中分值介于min和max之间的所有成员 我们挑出分值在160到180之间的成员

System.out.println(conn.zrangeByScore("high",160,180));

在这里插入图片描述

2.12 ZREVRANGEBYSCORE

ZREVRANGEBYSCORE全称zset reversal range by score 获取有序集合中分值介于min和max之间的所有成员,并按照分值从大到小的顺序来返回他们

System.out.println(conn.zrevrangeByScore("high",180,160));

在这里插入图片描述

2.13 ZREMRANGEBYRANK

ZREMRANGEBYRANK全称zset remove range by rank 移除有序集合中排名介于start和stop之间的所有成员 在移除之间先查看一下redis中的数据 在这里插入图片描述 运行代码

System.out.println(conn.zremrangeByRank("high",2,4));

返回被移除的数量 在这里插入图片描述 再次查看redis中的数据 在这里插入图片描述

2.14 ZREMRANGENYSCORE

ZREMRANGEBYSCORE全称zset remove range by score 移除有序集合中排名分值介于start和stop之间的所有成员

为了演示方便,我们将在high有序集合中多添加几行数据

System.out.println(conn.zadd("high",174,"Jay")); System.out.println(conn.zadd("high",169,"Pei")); System.out.println(conn.zadd("high",186,"Jone"));

在这里插入图片描述 然后移除170以下的成员

System.out.println(conn.zremrangeByScore("high",0,170));

在这里插入图片描述

2.15 ZINTERSTORE

ZINTERSTORE全称zset inter store 对给定的有序集合做交集运算,默认使用的聚合函数为sum,即默认在做交集操作时将不同集合中相同的成员所对应的分值相加,然后聚合成一个新的有序集合。

先创建两个有序集合

System.out.println(conn.zadd("zset-key1",1,"a")); System.out.println(conn.zadd("zset-key1",2,"b")); System.out.println(conn.zadd("zset-key1",3,"c")); System.out.println(conn.zadd("zset-key2",10,"b")); System.out.println(conn.zadd("zset-key2",20,"c")); System.out.println(conn.zadd("zset-key2",30,"d"));

很明显zset-key1和zset-key2的共同成员有"b"和"c",新建一个有序集合用来做两者的交集。

System.out.println(conn.zinterstore("zset-key3","zset-key1","zset-key2"));

在这里插入图片描述 很明显交集就是将两者的共同成员所对应的分值相加。

那么如果我们选用聚合函数MAX,就是在取交集时,选用相同成员中分值较高者为交集的分值要怎么操作呢

ZParams zParams = new ZParams(); zParams.aggregate(ZParams.Aggregate.MAX); System.out.println(conn.zinterstore("zset-key4",zParams,"zset-key1","zset-key2"));

查看redis中的数据 在这里插入图片描述 同理,如果选用min做为聚合参数,则将代码稍作修改即可

ZParams zParams = new ZParams(); zParams.aggregate(ZParams.Aggregate.MIN); System.out.println(conn.zinterstore("zset-key3",zParams,"zset-key1","zset-key2"));

在这里插入图片描述

2.16 ZUNIONSTORE

ZUNIONSTORE全称zset union store 对给定的有序集合做并集运算,同样并集运算的聚合函数也可以选用“max”,"min"和“sum”。为了避免重复性说明,我们选用max来做一次并集示范。

ZParams zParams = new ZParams(); zParams.aggregate(ZParams.Aggregate.MAX); System.out.println(conn.zunionstore("zset-key5",zParams,"zset-key1","zset-key2"));

在这里插入图片描述

总结

redis的五种数据类型的相关命令已经介绍完毕,接下去还会介绍一些redis中常用的其他命令,比如发布与订阅,键过期时间等等。

对Java系列知识感兴趣的朋友可以加入QQ群 慧梦软件开发技术联盟:952317701 更多系列文章在java高级程序开发微信公众号 Java高级开发技术



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3